package adfc2.core;

/**
 * Абстрактный динамический объект игрового мира, занимающий 1 клетку
 */
public abstract class Entity {
    protected int xy = -1;


    public final int getXY() {
        return xy;
    }

    public final int getX() {
        return World.xy2x(xy);
    }

    public final int getY() {
        return World.xy2y(xy);
    }

    public final void setXY(int xy) {
        this.xy = xy;
    }

    public void tick(long dt) {
    }

    public void removed() {
    }

    public final boolean isRemoved() {
        return (xy == -1);
    }

    public final void remove() {
        world().unregisterEntity(this);
        xy = -1;
        removed();
    }

    public static final World world() {
        return World.world();
    }

    public void tpTo(int xyto) {
        world().putEntityTo(this, xyto);
    }

    public void register(int xy) {
        world().registerEntity(this, xy);
    }

    public abstract String shortName();
}
